#序列化器
# app/serializers.py
from rest_framework import serializers
from .models import User


# UserSerializer 类用于序列化 User 模型
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        # 指定模型和包含的字段
        model = User
        fields = ('userid', 'username', 'password', 'realname', 'gender', 'rank')

# LoginSerializer 类用于登录时的数据验证
class LoginSerializer(serializers.Serializer):
    # 定义两个字段，username 和 password，都是字符类型，最大长度为200
    username = serializers.CharField(max_length=200)
    password = serializers.CharField(max_length=200)

    # validate 方法用于自定义验证逻辑
    def validate(self, data):
        # 从数据中获取 username 和 password
        username = data.get("username")
        password = data.get("password")
        # 如果 username 或 password 为空，抛出验证错误
        if not username or not password:
            raise serializers.ValidationError("必须同时提供用户ID和密码。")

        try:
            # 尝试从数据库中获取与提供的 username 匹配的用户
            user = User.objects.get(rroot_id=username)
        except User.DoesNotExist:
            # 如果找不到用户，抛出验证错误
            raise serializers.ValidationError("用户名不存在！。")

        # 如果用户存在，但密码不匹配，抛出验证错误
        if user.password != password:
            raise serializers.ValidationError("用户名或密码不正确。")

        # 如果验证通过，将 user 添加到数据中
        data["user"] = user
        return data

#注册的序列化器

class RegisterSerializer(serializers.ModelSerializer):
    class Meta:
        # 定义操作模型
        model = User
        # 指定序列化和反序列化时包含的字段
        fields = ('userid', 'username', 'password', 'realname', 'gender', 'rank')

    def create(self, validated_data):
        # 使用验证后的数据创建一个新的 User 实例
        user = User.objects.create(**validated_data)
        return user



